package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISaleServerCostRecordDAO;
import org.jsola.hr.dto.SaleServerCostRecordAddDTO;
import org.jsola.hr.dto.SaleServerCostRecordImportDTO;
import org.jsola.hr.dto.SaleServerCostRecordUpdateDTO;
import org.jsola.hr.entity.SaleServerCostRecordDO;
import org.jsola.hr.query.SaleServerCostRecordQuery;
import org.jsola.hr.vo.ImportExcelResultListVO;
import org.jsola.hr.vo.SaleServerCostRecordListVO;
import org.jsola.hr.vo.SaleServerCostRecordVO;
import org.jsola.user.core.TokenUser;

import java.io.File;
import java.util.List;


/**
 * 客户服务费记录
 *
 * @author zhr
 */
public interface ISaleServerCostRecordService extends IService<ISaleServerCostRecordDAO, SaleServerCostRecordDO> {

    /**
     * 新增客户服务费记录
     *
     * @param saleServerCostRecordAddDTO 新增客户服务费记录DTO
     * @param tokenUser                  当前用户
     * @return 客户服务费记录详情信息
     */
    SaleServerCostRecordVO save(SaleServerCostRecordAddDTO saleServerCostRecordAddDTO, TokenUser tokenUser);

    /**
     * 修改客户服务费记录
     *
     * @param saleServerCostRecordUpdateDTO 修改客户服务费记录DTO
     * @param tokenUser                     当前用户
     * @return 更新数量
     */
    int update(SaleServerCostRecordUpdateDTO saleServerCostRecordUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除客户服务费记录，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser               当前用户
     * @param saleServerCostRecordIds 客户服务费记录id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... saleServerCostRecordIds);

    /**
     * 根据客户服务费记录id查找
     *
     * @param saleServerCostRecordId 客户服务费记录id
     * @param siteId                 所属站点id
     * @return 客户服务费记录详情信息
     */
    SaleServerCostRecordVO selectById(String saleServerCostRecordId, String siteId);

    /**
     * 查询客户服务费记录
     *
     * @param saleServerCostRecordQuery 查询条件
     * @param siteId                    所属站点id
     * @return 客户服务费记录列表信息
     */
    List<SaleServerCostRecordListVO> select(SaleServerCostRecordQuery saleServerCostRecordQuery, String siteId);

    /**
     * 查询客户服务费记录记录数
     *
     * @param saleServerCostRecordQuery 查询条件
     * @param siteId                    所属站点id
     * @return 客户服务费记录记录数
     */
    int selectCount(SaleServerCostRecordQuery saleServerCostRecordQuery, String siteId);

    /**
     * 分页查询客户服务费记录
     *
     * @param saleServerCostRecordQuery 查询条件
     * @param siteId                    所属站点id
     * @return 客户服务费记录列表信息
     */
    Page<SaleServerCostRecordListVO> selectPage(SaleServerCostRecordQuery saleServerCostRecordQuery, String siteId);


    /**
     * 根据客户服务费记录id查找
     *
     * @param saleServerCostRecordId 客户服务费记录id
     * @param siteId                 所属站点id
     * @return 客户服务费记录
     */
    SaleServerCostRecordDO selectDOById(String saleServerCostRecordId, String siteId);

    /**
     * 查询客户服务费记录
     *
     * @param saleServerCostRecordQuery 查询条件
     * @param siteId                    所属站点id
     * @return 客户服务费记录列表
     */
    List<SaleServerCostRecordDO> selectDO(SaleServerCostRecordQuery saleServerCostRecordQuery, String siteId);

    /**
     * 导入excel
     *
     * @param file      excel
     * @param tokenUser 当前用户
     * @return 导入结果
     */
    ImportExcelResultListVO<SaleServerCostRecordImportDTO> importFile(File file, TokenUser tokenUser);

    /**
     * 导入数据入库
     *
     * @param saveDataList 入库数据
     * @param tokenUser    当前用户
     */
    void saveImportList(List<SaleServerCostRecordImportDTO> saveDataList, TokenUser tokenUser);

    /**
     * 查询对应用工单位下对应月份的服务费金额记录
     *
     * @param companyId 用工单位Id
     * @param costMonth 月份
     * @param tokenUser 当前用户
     * @return 客户服务费记录
     */
    List<SaleServerCostRecordDO> selectCompanyRecordByMonth(String companyId, String costMonth, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<SaleServerCostRecordDO> saveList);

    /**
     * 导入Excel覆盖原有数据
     *
     * @param importData 导入数据
     * @param tokenUser  当前用户
     */
    void overlaidData(List<SaleServerCostRecordImportDTO> importData, TokenUser tokenUser);

    /**
     * 查询对应用工单位下所有客户服务费金额
     *
     * @param companyId 用工单位Id
     * @param tokenUser 当前用户
     * @return 客户服务费金额
     */
    List<SaleServerCostRecordDO> selectCompanyRecord(String companyId, TokenUser tokenUser);

    /**
     * 错误数据导出
     *
     * @param errorList 错误列表
     * @return Excel路径
     */
    String exportErrorList(ImportExcelResultListVO<SaleServerCostRecordImportDTO> errorList);
}


